1
תגובות

מערך חד ממדי

פתח dinamit ,
נניח שיש לי מערך הכולל את כל המספרים מאחת עד מאה.
אני רוצה שכל פעם שאני ארענן את הדף יופיע מספר אחר, לפי הפרוצדורה הבאה:
1. תציג בהתחלה את כל המספרים המתחלקים ב-2
2. כשנגמרו המספרים בסעיף 1 - תציג את כל המספרים המתחלקים ב-3
3. כשנגמרו המספרים בסעיף 2 - תציג את כל המספרים המתחלקים ב-4
4. וכן הלאה

כל פעם שמספר מסוים מוצג אז הוא מוכנס לטבלה במסד הנתונים, כך שהפונקציה תדע לדלג על המספר הזה.

איך עושים דבר כזה?
חשוב לי להדגיש שהשאלה פחות מתייחסת ל"בעיה" של חילוק מספרים, אלא יותר לאיך להציג כל פעם רק את הרלוונטי הראשון

אשמח למעט עזרה :)

1 תשובות

avatar ענה intval ב 16 ליולי 2015 #

א. בשביל לשמור מידע כלשהו בין הריענונים תצטרך להשתמש בסשן (או במסד, אבל זה סתם מסובך)
ב. אפשר למצוא פונקציה שמקבלת בתור קלט את מספר הביקור בעמוד ומחזירה את הערך התואם

או גרסה יותר פשוטה, למשור שני ערכים בין ביקורים:
- "המחלק" קודם 2, אחרי זה 3, אחרי זה 4 וכו'
- וגם את המיקום במערך (שמתחיל מאפס כאשר עוברים למחלק הבא) אך ממשיך מאותו מקום אם לא קפצנו למחלק הבא בין ביקורים

משהו כזה:

<?php
session_start();
$arr = range(1, 16);

if(isset($_GET['restart']))
{
  unset($_SESSION['divisor']);
  header('Location:'.$_SERVER['SCRIPT_NAME']);
  exit;
}

if(!isset($_SESSION['divisor']))
{
  $_SESSION['divisor'] = 2;
  $_SESSION['position'] = 0;
}

// only those items of $arr that can be divided by divisor without remainings
$matchingItems = array_filter($arr, function($int){ return $int % $_SESSION['divisor'] == 0;});

// array_filter preserves old keys, which we don't need
$matchingItems = array_values($matchingItems);

//print_r($matchingItems);
echo $matchingItems[$_SESSION['position']];


// Move the position +1, and if it's out of the array, increase the divisor as well
$_SESSION['position']++;

if($_SESSION['position'] >= count($matchingItems))
{
  $_SESSION['divisor']++;
  $_SESSION['position'] = 0;
 
  if($_SESSION['divisor'] > $arr[count($arr)-1])
    $_SESSION['divisor'] = 2;
}
?>

<a href="?restart">restart</a>